package mSecretaria;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import myUtils.Constantes;
import myUtils.DBUtils;
import myUtils.IModelo;
import play.db.DB;
import play.db.jpa.Model;

public class MTipoLivro extends Model implements IModelo {
	
	//atributos
	
	private int codTipoLivro;
	private String descricao;
	private int ativo;
	

	//métodos de acesso
	public String getDescricao() {
		return this.descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public boolean IsAtivo() {
		return (this.ativo == Constantes.tlvAtivo);
	}

	public void setAtivo() {
		
		if(IsAtivo())
			this.ativo = Constantes.tlvInativo;
		else
			this.ativo = Constantes.tlvAtivo;
	}

	public int getCodTipoLivro() {
		return this.codTipoLivro;
	}

	public MTipoLivro(int aCodTipoLivro) throws Exception
	{
	
		ResultSet rs;
		
		String strQuery = "Select * From TipoLivro Where TipoLivro.CodTipoLivro = " + aCodTipoLivro;
				
		
		try
		{
			rs = DB.executeQuery(strQuery);
			
			
			if(rs == null)
				throw new Exception("Tipo de Livro não cadastrado!");
			
			while (rs.next())
			{
				this.codTipoLivro	= rs.getInt("CodTipoLivro");
				this.descricao   	= rs.getString("Descricao");
				this.ativo	    	= rs.getInt("Ativo");
			}
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage());
		}
		
	}
	

	public MTipoLivro(String aDescricao)
	{
		this.codTipoLivro	= 0;
		this.descricao    	= aDescricao;
		this.ativo	    	= 1;
	}
	
	private MTipoLivro(int aCodTipoLivro, String aDescricao,int aAtivo)
	{
		this.codTipoLivro 	= aCodTipoLivro;
		this.descricao		= aDescricao;
		this.ativo			= aAtivo;			
	}
	
	
	public static List<MTipoLivro> select(int aCodTipoLivro, String aDescricao, int aAtivo) throws Exception
	{
		ResultSet rs;
		String descricao;
		int ativo,codTipoLivro;
		
		
		List<MTipoLivro> retorno  = new ArrayList<MTipoLivro>();
		String strQuery = "Select * From TipoLivro Where TipoLivro.CodTipoLivro > 0" ;

		if(aCodTipoLivro > 0)
		{
			strQuery += " and TipoLivro.CodTipoLivro = " + aCodTipoLivro;
		}
		
		switch(aAtivo)
		{
			case 0: strQuery += " and TipoLivro.Ativo = 0"; break;
			case 1: strQuery += " and TipoLivro.Ativo = 1"; break;
		}
		
		strQuery += " and TipoLivro.Descricao Like '" + aDescricao + "%'"; 
		
		
		try
		{
			rs = DB.executeQuery(strQuery);	
			
			while (rs.next())
			{
				codTipoLivro 	= rs.getInt("CodTipoLivro");
				descricao		= rs.getString("Descricao");
				ativo			= rs.getInt("Ativo");
				
				MTipoLivro tipoLivro = new MTipoLivro(codTipoLivro,descricao,ativo);
				retorno.add(tipoLivro);
				
			}	
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
		}
		
		return retorno;		
		
	}
	
	
	@Override
	public void update() throws Exception {

		if(this.codTipoLivro == 0)
		{
			this.insert();
		}
		else
		{
			String strQuery = "Update TipoLivro set Descricao = '" + this.descricao + "'";
			strQuery += ", Ativo = " + this.ativo;
			strQuery += " Where TipoLivro.CodTipoLivro = " + this.codTipoLivro;
		 
		
			try
			{
				DB.execute(strQuery);			
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage());
			}
		}
		
	}

	@Override
	public void excluir() throws Exception {

		if(this.codTipoLivro != 0)
		{

			String strQuery = "Delete From TipoLivro Where TipoLivro.CodTipoLivro = " + this.codTipoLivro;
			
			try
			{
				DB.execute(strQuery);			
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
			}		
		}

	}

	@Override
	public void insert() throws Exception {
		
		ResultSet rs;
		String strQuery2 = "Select CodTipoLivro from TipoLivro Where ";
		strQuery2 += "Descricao = '" + this.descricao + "'";
		strQuery2 += " and ativo = " + this.ativo;
		
		String strQuery = "Insert Into TipoLivro(Descricao,Ativo) Values (";
		strQuery += "'" + this.descricao + "'";
		strQuery += "," + this.ativo + ")";
		
		try
		{
			DB.execute(strQuery);	
			rs = DB.executeQuery(strQuery2);
			
			while(rs.next())
			{
				this.codTipoLivro = rs.getInt("CodTipoLivro");
			}
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
		}

	}

}
